From 776ccdda08d6883ce6e684fe7d10ab7b628e234c Mon Sep 17 00:00:00 2001 From: tsteven4 Date: Fri, 11 Jan 2019 10:11:25 -0700 Subject: [PATCH] fix leaks when deleting wpts in filters. (#292) --- discard.cc | 4 +++- position.cc | 6 +++++- trackfilter.cc | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/discard.cc b/discard.cc index 18fa36214..b80e598d8 100644 --- a/discard.cc +++ b/discard.cc @@ -91,17 +91,19 @@ void DiscardFilter::fix_process_wpt(const Waypoint* wpt) switch (what) { case wptdata: waypt_del(waypointp); + delete waypointp; break; case trkdata: track_del_wpt(head, waypointp); + delete waypointp; break; case rtedata: route_del_wpt(head, waypointp); + delete waypointp; break; default: return; } - delete waypointp; } } diff --git a/position.cc b/position.cc index ea6cc94bf..6e6cf4c73 100644 --- a/position.cc +++ b/position.cc @@ -87,9 +87,11 @@ void PositionFilter::position_runqueue(queue* q, int nelems, int qtype) break; case trkdata: track_del_wpt(cur_rte, comp[j]); + delete comp[j]; break; case rtedata: route_del_wpt(cur_rte, comp[j]); + delete comp[j]; break; default: break; @@ -103,17 +105,19 @@ void PositionFilter::position_runqueue(queue* q, int nelems, int qtype) switch (qtype) { case wptdata: waypt_del(comp[i]); + delete comp[i]; break; case trkdata: track_del_wpt(cur_rte, comp[i]); + delete comp[i]; break; case rtedata: route_del_wpt(cur_rte, comp[i]); + delete comp[i]; break; default: break; } - delete comp[i]; } } } diff --git a/trackfilter.cc b/trackfilter.cc index 04e9086ce..6ca98ec08 100644 --- a/trackfilter.cc +++ b/trackfilter.cc @@ -1012,6 +1012,7 @@ void TrackFilter::trackfilter_segment_head(const route_head* rte) if (trackfilter_points_are_same(prev_wpt, wpt) && trackfilter_points_are_same(wpt, next_wpt)) { track_del_wpt(const_cast(rte), wpt); + delete wpt; continue; } } -- 2.30.2